#include "mcu_gpio.h"
#include "n32g45x.h"


typedef struct _gpio_init_param_t
{
    GPIO_Module* GPIOx;

    uint16_t Pin; /*!< Specifies the GPIO pins to be configured.
                            This parameter can be any value of @ref GPIO_pins_define */
    GPIO_ModeType GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
                                     This parameter can be a value of @ref GPIO_ModeType */
    GPIO_SpeedType GPIO_Speed; /*!< Specifies the speed for the selected pins.
                                       This parameter can be a value of @ref GPIO_SpeedType */
}gpio_init_param_t;


static const gpio_init_param_t gpio_init_list[] = _GPIO_INIT_LIST;

void Gpio_Init()
{
    int i;
    GPIO_InitType GPIO_InitStructure;

    GPIOA->POD = _GPIO_PA_ODR;
    GPIOB->POD = _GPIO_PB_ODR;
    GPIOC->POD = _GPIO_PC_ODR;
    GPIOD->POD = _GPIO_PD_ODR;
    GPIOE->POD = _GPIO_PE_ODR;
    GPIOF->POD = _GPIO_PF_ODR;
    GPIOG->POD = _GPIO_PG_ODR;
    for(i=0; i<sizeof(gpio_init_list)/sizeof(gpio_init_param_t); i++)
    {
        GPIO_InitStructure.Pin = gpio_init_list[i].Pin;
        GPIO_InitStructure.GPIO_Mode = gpio_init_list[i].GPIO_Mode;
        GPIO_InitStructure.GPIO_Speed = gpio_init_list[i].GPIO_Speed;
        GPIO_InitPeripheral(gpio_init_list[i].GPIOx, &GPIO_InitStructure);
    }
}

